package com.cwnu.sw.cys.core.common.config;

import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import java.util.concurrent.TimeUnit;

/**
 * @author jisam
 * @version 1.0
 * @contact "jisamchan@outlook.com"
 * @date 25/03/2025
 * @description 缓存配置类
 */

@EnableCaching
@Configuration
public class CacheConfig extends CachingConfigurerSupport {

    /**
     * 创建并配置一个基于Caffeine的缓存管理器。
     * 该缓存管理器被标记为主要的缓存管理器（@Primary），
     * 并且使用Caffeine库来管理缓存。
     *
     * @return CacheManager 返回一个配置好的Caffeine缓存管理器实例。
     */
    @Bean("caffeineCacheManager")
    @Primary
    public CacheManager caffeineCacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();

        // 配置Caffeine缓存的具体参数：
        // 1. 设置缓存项在写入后5分钟过期。
        // 2. 设置缓存的初始容量为100。
        // 3. 设置缓存的最大容量为200。
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .expireAfterWrite(5, TimeUnit.MINUTES)
                .initialCapacity(100)
                .maximumSize(200));

        return cacheManager;
    }

}
